博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
弹出另存为窗口下载指定目录的文件
阅读量:4053 次
发布时间:2019-05-25

本文共 5787 字,大约阅读时间需要 19 分钟。

项目中要实现导出文件的功能,点导出按钮时让它弹出来一个窗口,选择存储目录和文件名

实现如下:

servlet方式

弹出来的是文件下载窗口

html代码:

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>              Html2PdfServlet	

java代码:

package com.test;import java.io.IOException;import java.io.OutputStream;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.xhtmlrenderer.pdf.ITextFontResolver;import org.xhtmlrenderer.pdf.ITextRenderer;import com.lowagie.text.pdf.BaseFont;public class Html2PdfServlet extends HttpServlet {	private static final long serialVersionUID = 1L;	public void doGet(HttpServletRequest request, HttpServletResponse response)		throws ServletException, IOException {		//pageContext.getServletContext().getRealPath("/")		ServletContext sc = request.getSession().getServletContext();		String path = sc.getRealPath(""); //值为D:\apache-tomcat-6.0.26\webapps\createpdf		System.out.println("原path: " + path);		//把路径中的反斜杠转成正斜杠		path = path.replaceAll("\\\\", "/"); //值为D:/apache-tomcat-6.0.26/webapps/createpdf		System.out.println(path);				String path2 = sc.getRealPath("/");		System.out.println("path2: " + path2);				System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));				System.out.println("request.getRequestURI: " + request.getRequestURI());		//获取使用的端口号		System.out.println(request.getLocalPort());				String path3 = request.getContextPath();		String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path3+"/";				System.out.println("basepath: " + basePath);						response.setContentType("application/pdf");		//response.setHeader("Content-Disposition", "attachment; filename=WebReport.pdf");		response.setHeader("Content-Disposition", "inline; filename=WebReport.pdf");        		StringBuffer html = new StringBuffer();		//组装成符合W3C标准的html文件,否则不能正确解析		html.append("");		html.append("")		.append("")		.append("
") .append("") .append("") .append("") .append(""); html.append("

统计报表

"); html.append("
"); html.append("
"); html.append("
"); html.append(""); // parse our markup into an xml Document try { ITextRenderer renderer = new ITextRenderer(); /** * 引入了新的jar包,不用再导入字体了 ITextFontResolver fontResolver = renderer.getFontResolver(); fontResolver.addFont("C:/Windows/fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); */ renderer.setDocumentFromString(html.toString()); // 解决图片的相对路径问题 //renderer.getSharedContext().setBaseURL("file:/C:/Documents and Settings/dashan.yin/workspace/createpdf/WebRoot/images"); //renderer.getSharedContext().setBaseURL("file:/D:/apache-tomcat-6.0.26/webapps/createpdf/images"); renderer.getSharedContext().setBaseURL("file:/" + path + "/images"); renderer.layout(); OutputStream os = response.getOutputStream(); renderer.createPDF(os); os.close(); } catch (Exception e) { e.printStackTrace(); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}

Struts1方式

弹出来的是另存为窗口

html代码:

<%@ page language="java" contentType="text/html; charset=GB18030"    pageEncoding="GB18030"%>
用户登录

用户登录


用户:
密码:

java代码:

package com.bjsxt.struts;import java.io.File;import java.io.FileInputStream;import java.io.OutputStream;import java.io.PrintWriter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction;public class ResponseAction extends DispatchAction {		/**	 * 要想实现另存为下载必须满足的条件:	 * 1.导入jar包:commons-fileupload.jar	 * 2.发送请求必须以一个form表单的形式,且提交的时候必须是type="submit"(这一条也不对,也以可是type="button"),	 * form的action值为相应的Action,后面不能跟方法名,跟一个form属性method="post",即:	 * 
3.相应的Action中方法名为execute,即:(这一条不对,这跟struts配置有关) public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) * * 现在最新总结出来:只需要满足两个条件: * 导入jar包:commons-fileupload.jar * 以表单提交 * */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { StringBuffer buffer = new StringBuffer("你好"); String pdfPathName = "C:/Documents and Settings/dashan.yin/workspace/webmonitor_4/WebRoot/pdf/test.pdf"; try { OutputStream out = response.getOutputStream(); byte by[] = new byte[1024]; File fileLoad = new File(pdfPathName); response.reset(); response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "attachment; filename=WebReport.pdf"); long fileLength = fileLoad.length(); String length1 = String.valueOf(fileLength); response.setHeader("Content_Length", length1); FileInputStream in = new FileInputStream(fileLoad); int n; while ((n = in.read(by)) != -1) { out.write(by, 0, n); } in.close(); out.flush(); } catch (Exception e) { e.printStackTrace(); } return null; }}

 

转载地址:http://cltci.baihongyu.com/

你可能感兴趣的文章